using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Expression;
using Ksibo;
using Ksibo.Modelo;
using Ksibo.Dados;


namespace Ksibo.Negocio
{
    public class GerenciadorRevista
    {
        public GerenciadorRevista()
        {
        }
        public static Revista GetRevistaById(int id)
        {
            return ConexaoBD<Revista>.BuscaById(id);
        }
        public static IList<Revista> GetRevistaByName(string nome)
        {
            return ConexaoBD<Revista>.Busca(Order.Asc("Nome"),Expression.Like("Nome", "%"+nome+"%"));
        }
        public static IList<Revista> GetRevistaByEdicao(string edicao)
        {
            return ConexaoBD<Revista>.Busca(Order.Asc("Edicao"),Expression.Like("Edicao", "%" + edicao + "%"));
        }
        public static IList<Revista> GetRevistaByAno(string ano)
        {
            return ConexaoBD<Revista>.Busca(Order.Asc("Ano"),Expression.Like("Ano", "%" + ano));
        }
        public static IList<Revista> GetTodasRevistas()
        {
            return ConexaoBD<Revista>.Busca(Order.Asc("Nome"));
        }

        public static bool DeletaRevista(params int[] id)
        {
            return ConexaoBD<Revista>.Deleta(id);
        }

        public static bool DeletaRevista(IList<Revista> revs)
        {
            return ConexaoBD<Revista>.Deleta(revs);
        }

        public static IList<String> getNomesRevistas()
        {
            IList<String> nomesRevistas = new List<String>();
            IList<Revista> revs = ConexaoBD<Revista>.Busca();
            if (revs != null)
            {
                foreach (Revista rev in revs)
                {
                    if(!nomesRevistas.Contains(rev.Nome))
                    {
                        nomesRevistas.Add(rev.Nome);
                    }
                }
            }            
            return nomesRevistas;
            //return ConexaoBD<Revista>.Busca(Expression.Sql("SELECT DISTINCT nome_revista FROM revista ORDER BY nome_revista");
        }

        public static bool insereRevista(IList<Revista> listRevista) {
            
            bool ret = Definicoes.TRANSACAO_SEM_ERRO;
            
            if (listRevista != null)
            {
                foreach (Revista objRevista in listRevista)
                {
                    ret = ConexaoBD<Revista>.Salva(objRevista);
                    if (ret.Equals(Definicoes.TRANSACAO_COM_ERRO))
                    {
                        return ret;
                    }
                }                
             }
             return ret;
        }
        public static bool insereRevista(Revista rev)
        {
            if (rev != null)
            {
                return ConexaoBD<Revista>.Salva(rev);
            }
            return false;
        }
    }
}
